package com.ztao.service.impl;
import com.alibaba.fastjson.JSON;
import com.heima.model.common.dtos.ResponseResult;
import com.heima.model.common.schedule.dto.TaskDto;
import com.heima.model.common.wemedia.pojos.WmNews;
import com.ztao.api.schedule.ScheduleClientApi;
import com.ztao.service.WmNewsAutoScanService;
import com.ztao.service.WmNewsTaskService;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;

/**
 * @Date 2024/5/27 9:54
 * @Author
 **/

@Service
public class WmNewsTaskServiceImpl implements WmNewsTaskService {

    @Resource
    private ScheduleClientApi scheduleClientApi;
    @Resource
    private WmNewsAutoScanService wmNewsAutoScanService;

    @Override
    public void addNewsToTask(WmNews wmNews) {
        //添加数据库到任务表
        //2.要执行的数据添加list里面，未来5分钟执行的添加到zSet里面
        TaskDto taskDto=new TaskDto();
        taskDto.setTaskType(1);
         taskDto.setPriority(0);
        taskDto.setExecuteTime(wmNews.getPublishTime().getTime());
        taskDto.setParameters(JSON.toJSONBytes(wmNews));
        scheduleClientApi.addTask(taskDto);
    }

    /**
     * 从list里面把数据取出来进行消费
     */
    //怎么调用   调用一次取出一个数据，并把list里面得数据给删除
    //第二次调用   第三次调用  。。。
    //每调用一次取出一次数据 进行自动审核   --定时任务 1s一次

    @Scheduled(fixedRate = 1000)
    @Override
    public void scanNewsByTask() {

        System.out.println("获取list里面得数据进行消费"+new Date().toLocaleString());
        ResponseResult responseResult = scheduleClientApi.poll(1);
        if (responseResult!=null && responseResult.getCode() == 200) {
            //从list里面把数据取出来
            System.out.println("获取到的对象"+responseResult.getData());
//            TaskDto taskDto = JSON.parseObject(responseResult.getData().toString(),TaskDto.class) ;
//            TaskDto taskDto = (TaskDto)responseResult.getData() ;
            String json=JSON.toJSONString(responseResult.getData());
            System.out.println("对象的json"+json);
            TaskDto taskDto = JSON.parseObject(json,TaskDto.class) ;
            //进行消费  -执行自动审核的操作
            //taskDto里面有个参数  把对象整个做个参数传递进来的

            WmNews wmNews = JSON.parseObject(taskDto.getParameters(), WmNews.class);
            //调用自动审核的方法
            //news_Id
            System.out.println("进行审核======="+wmNews.getId()+""+new java.util.Date().toString());
            wmNewsAutoScanService.autoScanWnMews(wmNews.getId());
        }
    }
}